linux_windowsfandomcom_ru-20200214-history
Linux в Windows AD
Предполагается, что у вас уже установлена роль AD DS и роль вашего сервера повышена до уровня контроллера домена. Данная инструкция проверена на Windows server 2012 r2 и ubuntu desktop 16.04 Итак, приступим. Для введения linux-машины в AD вам понадобится установить: Kerberos, Samba, Winbind. Перед установкой желательно обновиться: sudo apt-get install aptitude sudo apt update sudo apt upgrade Установить всё необходимое можно командой: sudo aptitude install krb5-user samba winbind Также может понадобиться установить следующие библиотеки: sudo aptitude install libpam-krb5 libpam-winbind libnss-winbind Настройка DNS Для начала необходимо изменить настройки DNS на вашей машине, прописав в качестве DNS сервера контроллер домена и в качестве домена поиска - нужный домен. В современных дистрибутивах файл resolv.conf создается автоматически и править вручную его не нужно. Для получение нужного результата нужно добавить необходимые изменения в следующий файл: sudo nano /etc/resolvconf/resolv.conf.d/head Данные, которые будут добавлены в него, будут автоматически вставлены в файл /etc/resolv.conf domain mage.com search mage.com nameserver 192.168.1.39 Если IP-адрес динамический и присваивается DHCP сервером то после перезагрузки resolv.conf может формироваться «неправильный» resolv.conf', например присутствует только один nameserver 192.168.1.39 и не указаны domain и search. Нужно отредактировать sudo nano /etc/dhcp/dhclient.conf Чтобы появились записи domain и search нужно убрать комментарий перед строкой supersede domain-name, и вписать свой домен: supersede domain-name "mage.com"; Чтобы добавить nameserver нужно убрать комментарий перед prepend domain-name-servers и указать ip сервера: prepend domain-name-servers 192.168.1.39; Убираем комментарий в поле alias у параметров interface, fixed-address, option subnet-mask и подставляем свои значения eth33, 192.168.1.42, 255.255.255.0 соответственно Для применения изменений остается перезапустить службу: sudo /etc/init.d/networking restart Теперь убедитесь, что вы задали нужное имя компьютера в файле (у меня оно ubuntuinAD) sudo nano /etc/hostname ubuntuinAD Кроме того, необходимо отредактировать файл hosts sudo nano /etc/hosts так, чтобы в нём была запись с полным доменным именем компьютера и обязательно коротким именем хоста, ссылающаяся на один из внутренних IP: # Имена этого компьютера 127.0.0.1 localhost 127.0.1.1 ubuntuinAD.mage.com ubuntuinAD Сразу нужно проверить что нормально пингуется наш контролер домена, по короткому (win-serv-2012) и полному имени (win-serv-2012.mage.com), чтобы в будущем не получать ошибки что контролер домена не найден: ping win-serv-2012 ping win-serv-2012.mage.com Не обязательно, но если вы что-то поменяете - перезагрузите компьютер для применения изменений. Настройка синхронизации времени Далее необходимо настроить синхронизацию времени с контролером домена. Если разница будет более 5 минут мы не сможем получить лист от Kerberos. Для единовременной синхронизации можно воспользоваться командой: sudo net time set win-serv-2012@mage.com или sudo net time -S win-serv-2012@mage.com Если в сети существует сервер точного времени, то можно воспользоваться им или любым публичным: sudo ntpdate ntp.mobatime.ru Автоматическая же синхронизация настраивается с помощью ntpd, этот демон будет периодически выполнять синхронизацию. Для начала его необходимо установить: sudo aptitude install ntp Теперь исправьте файл sudo nano /etc/ntp.conf добавив в него информацию о вашем сервере времени: # You do need to talk to an NTP server or two (or three). server 1.by.pool.ntp.org server 1.europe.pool.ntp.org server 0.europe.pool.ntp.org После чего перезапустите демон ntpd: sudo /etc/init.d/ntp restart Чтобы изменить часовой пояс, необходимо ввести команду sudo dpkg-reconfigure tzdata sudo service cron restart Теперь пора настраивать непосредственно взаимодействие с доменом. Настройка авторизации через Kerberos Начнём с настройки авторизации в домене через протокол Kerberos. Вам потребуется изменить файл /etc/krb5.conf sudo nano /etc/krb5.conf libdefaults default_realm = MAGE.COM kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true realms MAGE.COM = { kdc = win-serv-2012 admin_server = win-serv-2012 default_domain = MAGE.COM } domain_realm .mage.com = MAGE.COM mage.com = MAGE.COM login krb4_convert = false krb4_get_tickets = false Вам, конечно, нужно изменить mage.com на ваш домен и win-serv-2012 на ваш(и) контроллер(ы) домена. Кстати, возможно вам понадобится написать полное имя контроллера домена win-serv-2012.mage.com. Поскольку у меня прописан домен поиска в DNS, то мне это делать не нужно. Обратите особое внимание на регистр написания имени домена - везде, где домен написан в верхнем регистре, его обязательно нужно писать именно в верхнем регистре. Иначе волшебным образом ничего может не заработать. Это не все возможные опции настройки Kerberos, только основные. Однако их обычно достаточно. Теперь настало время проверить, что мы можем авторизоваться в домене. Для этого выполните команду sudo kinit ubuntuinAD@MAGE.COM Имя домена необходимо писать заглавными буквами! Если вы не получили никаких ошибок - значит вы настроили всё верно и домен отдаёт вам билет Kerberos. Убедиться в том, что билет получен, можно выполнив команду sudo klist Удалить все билеты (они вам вообще говоря не нужны) можно командой sudo kdestroy Настройка Samba и вход в домен Для того, чтобы войти в домен, необходимо прописать правильные настройки в файле /etc/samba/smb.conf sudo nano /etc/samba/smb.conf На данном этапе вас должны интересовать только некоторые опции из секции global. Ниже - пример части файла конфигурации Samba с комментариями по поводу значения важных параметров: global # Эти две опции нужно писать именно в заглавном регистре, причём workgroup без # последней секции после точки, а realm - полное имя домена workgroup = MAGE realm = MAGE.COM # Эти две опции отвечают как раз за авторизацию через AD security = ADS encrypt passwords = true # Просто важные dns proxy = no socket options = TCP_NODELAY # Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе, или даже стать контроллером домена, то всегда прописывайте эти пять опций именно в таком виде domain master = no local master = no preferred master = no os level = 0 domain logons = no # Отключить поддержку принтеров load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes После того, как вы отредактируете smb.conf, выполните команду sudo testparm Она проверит вашу конфигурацию на ошибки и выдаст суммарную сводку о нём: # testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions Смотрим есть ли ошибки или предупреждения, если появится: «rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)» Необходимо отредактировать файл /etc/security/limits.conf sudo nano /etc/security/limits.conf # Добавить в конец файла строки: * - nofile 16384 root - nofile 16384 Как видно мы задали правильные параметры для того, чтобы наш компьютер стал членом домена. Теперь пора попытаться непосредственно войти в домен. Для этого введите команду: sudo net ads join -U ubuntuinAD -D MAGE И в случае успеха вы увидите что-то похожее на: # net ads join -U ubuntuinAD -D MAGE Enter username's password: Using short domain name -- MAGE Joined 'UBUNTUINAD' to realm 'mage.com' Если появляется ошибка Failed to join domain: Failed to set account flags for machine account (NT_STATUS_ACCESS_DENIED) – в нашем случае это говорит о том, что у пользователя ubuntuinAD нет прав на добавление пользователей (самого себя) в домен. Для этого необходимо залогиниться под админом AD sudo net ads join -U admin -D MAGE Далее запускаем команду и выбираем пункт создания папки для пользователя домена sudo pam-auth-update и выбрать пункт Create home folder on login. Также в файле /etc/samba/smb.conf добавили sudo nano /etc/samba/smb.conf template homedir = /home/%D/%U В процессе входа в Linux может появляться ряд сообщений типа: ... groups: cannot find name for group ID 11224 groups: cannot find name for group ID 11231 groups: cannot find name for group ID 11277 groups: cannot find name for group ID 12569 groups: cannot find name for group ID 12737 groups: cannot find name for group ID 12753 ... Чтобы избавиться от вывода подобного рода сообщений при входе в систему есть два простых решения. Либо закомментировать участок кода в файле /etc/bash.bashrc, либо для доменных пользователей использовать альтернативную shell-оболочку, например zsh (при этом надо поменять параметр template shell конфигурационного файла smb.conf на /bin/zsh и перезапустить службы Samba). Я предпочёл первый способ. sudo nano /etc/bash.bashrc # sudo hint if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then case " $(groups) " in *\ admin\ *) if [ -x /usr/bin/sudo ]; then cat <<-EOF To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. EOF fi esac fi Этот участок скрипта используется для банального вывода подсказки о том, что для выполнения административных действий требуется использовать sudo. При этом здесь выполняется проверка членства залогинившегося пользователя в группах вызовом утилиты groups, которая в свою очередь при вызове в контексте доменного пользователя будет пытаться вернуть список доменных групп в которые он входит. При этой операции используется Winbind, у которого есть проблемы с чтением из домена AD групп имеющих непустой атрибут sIDHistory. Так же можно набрать команду: sudo net ads testjoin Если все хорошо, можно увидеть: #net ads testjoin Join is OK Но иногда после сообщения о присоединении к домену выдаётся ошибка наподобие DNS update failed! Это не очень хорошо, и в этом случае рекомендуется ещё раз прочитать раздел про настройку DNS чуть выше и понять, что же вы сделали не так. После этого нужно удалить компьютер из домена и попытаться ввести его заново. Если вы твердо уверены, что всё настроили верно, а DNS всё равно не обновляется, то можно внести вручную запись для вашего компьютера на ваш DNS сервер и всё будет работать. Конечно, если нет никаких других ошибок, и вы успешно вошли в домен. Однако лучше всё же разберитесь, почему DNS не обновляется автоматически. Это может быть связано не только с вашим компьютером, но и с некорректной настройкой AD. Прежде чем выяснять, почему же не обновляется DNS, не забудьте перезагрузить компьютер после введения в домен! Вполне возможно, что это решит проблему. Если всё прошло без ошибок, то поздравляем, вы успешно вошли в домен! Можете заглянуть в AD и убедиться в этом. Кроме того, хорошо бы проверить, что вы можете видеть ресурсы в домене. Для этого установите smbclient: sudo aptitude install smbclient Теперь можно просматривать ресурсы компьютеров домена. Но для этого нужно иметь билет kerberos, т.е. если мы их удалили, то получаем опять через kinit. sudo kinit ubuntuinAD@MAGE.COM Посмотрим какие ресурсы предоставлены в сеть одним из компьютеров (win-serv-2012): sudo smbclient -k -L win-serv-2012 Вы должны увидеть список общих ресурсов на этом компьютере. Настройка Winbind Если вам необходимо как-либо работать с пользователями домена, например, настраивать SMB-шары с разграничением доступа, то вам понадобится кроме самой Samba ещё и Winbind - специальный демон, служащий для связи локальной системы управления пользователями и группами Linux с сервером Active Directory. Проще говоря Winbind нужен, если вы хотите видеть пользователей домена на своём компьютере с Ubuntu. Winbind позволяет спроецировать всех пользователей и все группы AD в вашу Linux систему, присвоив им ID из заданного диапазона. Таким образом вы сможете назначать пользователей домена владельцами папок и файлов на вашем компьютере и выполнять любые другие операции, завязанные на пользователей и группы. Для настройки Winbind используется всё тот же файл /etc/samba/smb.conf. Добавьте в секцию global следующие строки: sudo nano /etc/samba/smb.conf # Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind. # Диапазоны идентификаторов для виртуальных пользователей и групп. idmap config * : range = 10000-20000 idmap config * : backend = tdb # Эти опции не стоит выключать. winbind enum groups = yes winbind enum users = yes # Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп # будут использоваться с доменом, т.е. вместо username - DOMAIN\username. # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. winbind use default domain = yes # Если вы хотите разрешить использовать командную строку для пользователей домена, то # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false template shell = /bin/bash # Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку winbind refresh tickets = yes Параметры: idmap uid = 10000 - 40000 idmap gid = 10000 - 40000 в новых версиях Samba уже устарели и при проверке конфига самбы с помощью testparm будет выдаваться предупреждение: WARNING: The «idmap uid» option is deprecated WARNING: The «idmap gid» option is deprecated Чтобы убрать предупреждения нужно заменить эти строки на новые: idmap config * : range = 10000-20000 idmap config * : backend = tdb Теперь перезапустите демон Winbind и Samba в следующем порядке: sudo /etc/init.d/winbind stop sudo smbd restart sudo /etc/init.d/winbind start Запускаем sudo testparm Смотрим есть ли ошибки или предупреждения После перезапуска проверьте, что Winbind установил доверительные отношения с AD командой: sudo wbinfo -t checking the trust secret for domain DCN via RPC calls succeeded А так же, что Winbind увидел пользователей и группы из AD командами: sudo wbinfo -u sudo wbinfo -g Эти две команды должны выдать список пользователей и групп из домена соответственно. Либо с префиксом MAGE\, либо без него - в зависимости от того, какое значение вы указали параметру «winbind use default domain» в smb.conf. Итак, Winbind работает, однако в систему он ещё не интегрирован. Добавление Winbind в качестве источника пользователей и групп Для того, чтобы ваша Ubuntu прозрачно работала с пользователями домена, в частности, чтобы вы могли назначать пользователей домена владельцами папок и файлов, необходимо указать Ubuntu использовать Winbind как дополнительный источник информации о пользователях и группах. Для этого измените две строчки в файле /etc/nsswitch.conf sudo nano /etc/nsswitch.conf passwd: compat group: compat добавив к ним в конце winbind: passwd: compat winbind group: compat winbind также рекомендую привести строку hosts к виду: hosts: dns mdns4_minimalNotFoud=return mdns4 files Теперь проверьте, что Ubuntu запрашивает у Winbind информацию о пользователях и группах, выполнив sudo getent passwd sudo getent group Первая команда должна вам вернуть всё содержимое вашего файла /etc/passwd, то есть ваших локальных пользователей, плюс пользователей домена с ID из заданного вами в smb.conf диапазона. Вторая должна сделать тоже самое для групп. Теперь вы можете взять любого пользователя домена и сделать его, например, владельцем какого-нибудь файла. Авторизация в Ubuntu через пользователей домена Несмотря на то, что все пользователи домена фактически стали полноценными пользователями системы (в чём можно убедиться, выполнив последние две команды из предыдущего раздела), зайти ни под кем из них в систему всё ещё нельзя. Для включения возможности авторизации пользователей домена на компьютере с Ubuntu необходимо настроить PAM на работу с Winbind. Онлайн авторизация Для Ubuntu 16 устанавливаем графическую оболочку и отключаем гостя sudo apt-get install ubuntu-desktop sudo mkdir /etc/lightdm/lightdm.conf.d sudo sh -c 'printf "SeatDefaults\nallow-guest=false\n" > /etc/lightdm/lightdm.conf.d/50-no-guest.conf' greeter-show-manual-login=true # этим мы отключили гостя и открыли окно для ручного вводя логина и пароля Необходимо перенести запуск Winbind при загрузке системы после всех остальных служб (по умолчанию он запускается с индексом 20). Для этого в терминале выполните следующую команду: sudo bash -c "for i in 2 3 4 5; do mv /etc/rc$i.d/S20winbind /etc/rc$i.d/S99winbind; done" Что эквивалентно запуску для каждого уровня (в примере - 4) команды: sudo mv /etc/rc4.d/S20winbind /etc/rc4.d/S99winbind В некоторых случаях winbind может иметь иной уровень запуска (например, S02winbind). Поэтому сначала проверьте имена файлов, выполнив команду sudo ls /etc/rc{2,3,4,5}.d/ | grep winbind Готово, все настройки завершены. Перезагружайтесь и пытайтесь войти с учетной записью пользователя домена.